import numpy as np

def accuracy_score(y_real, y_predict):
    """计算y_real和y_predict之间的准确率"""
    assert y_real.shape[0] == y_predict.shape[0], "真实值个数和预测值个数必须相等"

    return sum(y_real == y_predict) / len(y_real)

def mean_squared_error(y_real, y_predict):
    """计算y_real和y_predict之间的均方误差"""
    assert len(y_real) == len(y_predict), "真实值个数和预测值个数必须相等"

    return np.sum((y_real - y_predict) ** 2 / len(y_real))

def root_mean_squared_error(y_real, y_predict):
    """计算y_real和y_predict之间的均方根误差"""
    assert len(y_real) == len(y_predict), "真实值个数和预测值个数必须相等"

    return np.sqrt(mean_squared_error(y_real, y_predict))

def mean_absolute_error(y_real, y_predict):
    """计算y_real和y_predict之间的平均绝对误差"""
    assert len(y_real) == len(y_predict), "真实值个数和预测值个数必须相等"

    return np.sum(np.absolute(y_real - y_predict)) / len(y_real)

def r2_score(y_real, y_predict):
    """计算y_real和y_predict之间的平均绝对误差"""
    assert len(y_real) == len(y_predict), "真实值个数和预测值个数必须相等"

    return 1 - mean_squared_error(y_real, y_predict) / np.var(y_real)